package com.ljy.my_study.leetcode.旋转链表;

import com.ljy.my_study.util.ListNodeUtil;
import com.ljy.my_study.util.ListNodeUtil.*;

/**
 * @author lijunying
 * @date 2021/9/15 16:27
 */
public class TestMain {

//    给你一个链表的头节点 head ，旋转链表，将链表每个节点向右移动 k 个位置。
//
//             
//
//    示例 1：
//
//
//    输入：head = [1,2,3,4,5], k = 2
//    输出：[4,5,1,2,3]
//    示例 2：
//
//
//    输入：head = [0,1,2], k = 4
//    输出：[2,0,1]
//             
//
//    提示：
//
//    链表中节点的数目在范围 [0, 500] 内
//-100 <= Node.val <= 100
//            0 <= k <= 2 * 109
//
//    来源：力扣（LeetCode）
//    链接：https://leetcode-cn.com/problems/rotate-list
//    著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

    public static void main(String[] args) {
        ListNode head=ListNodeUtil.createListNode(new int[]{});
        System.out.println(new TestMain().rotateRight(head,5));
    }

    public ListNode rotateRight(ListNode head, int k) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode fast=head;
        for(int i=0;i<k;i++){
            fast=fast.next;
            if(fast==null){
                fast=head;
            }
        }
        ListNode slow=head;
        while(fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }
        ListNode newHead=slow.next;
        if(newHead==null){
            newHead=head;
        }
        fast.next=head;
        slow.next=null;
        return newHead;
    }
}
